function [f_min,x]=Proximity_operator_line_search(f,xp,u0)
% 函数梯度解析的梯度下降的线搜索算法Basic line search algorithm
% 计算邻近算子优化
proxh=@(u)2*u0'*u'+u'-xp';% 邻近算子梯度，该部分在使用函数时需要手动更新
x0=xp;% 初始点
alpha0m=100;% 初始步长
mn=300;% 迭代次数
gama2=1/mn;% 迭代次数倒数
mn1=200;% 线搜索准则判断迭代次数
x=x0;% 初始点位置
gama1=0.9;% 回退法参数gama1设置
c1=1e-2;% 常数c1设置
e=1e-4;% 梯度阈值
for i=1:mn
    tic
    alpha0=(mn-i+1)*gama2*alpha0m;% 该次迭代初始步长
    alpha=alpha0;
    c_u=[proxh(x)]';% 计算梯度
    if(norm(c_u)<e)
        break
    end
    c_u=c_u/norm(c_u);
    for j=1:mn1
        xk=x+(-c_u*alpha);% 迭代点
        if f(xk)<=f(x)-c1*alpha*(c_u*c_u')% Armijo准则
            break
        else
            alpha=gama1*alpha;
        end
    end
    x=xk;
end
f_min=f(x);